"""
AI 服务接口
"""
from abc import ABC, abstractmethod
from typing import Dict, Any, Optional, List

from app.models.comment import Comment


class IAIService(ABC):
    """
    AI 服务接口，定义 AI 服务的功能
    """
    
    @abstractmethod
    def analyze_comment(self, comment: Comment) -> Dict[str, Any]:
        """
        分析评论
        
        @param comment: 评论对象
        @return: 分析结果
        """
        pass
    
    @abstractmethod
    def analyze_comment_async(self, comment: Comment) -> None:
        """
        异步分析评论
        
        @param comment: 评论对象
        """
        pass
    
    @abstractmethod
    def generate_reply(self, comment: Comment, prompt: Optional[str] = None) -> str:
        """
        生成回复
        
        @param comment: 评论对象
        @param prompt: 提示词
        @return: 生成的回复
        """
        pass
    
    @abstractmethod
    def generate_reply_async(self, comment: Comment, prompt: Optional[str] = None) -> None:
        """
        异步生成回复
        
        @param comment: 评论对象
        @param prompt: 提示词
        """
        pass
    
    @abstractmethod
    def configure(self, config: Dict[str, Any]) -> None:
        """
        配置 AI 服务
        
        @param config: 配置字典
        """
        pass
    
    @abstractmethod
    def set_speech_service(self, speech_service) -> None:
        """
        设置语音服务
        
        @param speech_service: 语音服务实例
        """
        pass
    
    @abstractmethod
    def set_script_service(self, script_service) -> None:
        """
        设置脚本服务
        
        @param script_service: 脚本服务实例
        """
        pass
    
    @abstractmethod
    def shutdown(self) -> None:
        """
        关闭 AI 服务
        """
        pass
    
    @abstractmethod
    def get_bots(self) -> List[Dict[str, Any]]:
        """
        获取机器人列表
        
        @return: 机器人列表
        """
        pass
    
    @abstractmethod
    def create_conversation(self, name: str = None) -> str:
        """
        创建新会话
        
        @param name: 会话名称
        @return: 会话ID
        """
        pass
    
    @abstractmethod
    def get_conversations(self, bot_id: str = None) -> Dict[str, str]:
        """
        获取会话列表
        
        @param bot_id: 机器人ID，如果为None则使用当前机器人
        @return: 会话字典，格式: {conversation_id: name}
        """
        pass
    
    @abstractmethod
    def add_listener(self, event_type: str, listener) -> None:
        """
        添加事件监听器
        
        @param event_type: 事件类型
        @param listener: 监听器函数
        """
        pass
    
    @abstractmethod
    def remove_listener(self, event_type: str, listener) -> bool:
        """
        移除事件监听器
        
        @param event_type: 事件类型
        @param listener: 监听器函数
        @return: 是否成功移除
        """
        pass
    
    @abstractmethod
    def clear_listeners(self, event_type: str = None) -> None:
        """
        清除事件监听器
        
        @param event_type: 事件类型，如果为None则清除所有监听器
        """
        pass 